#!/bin/bash

################################################################################
# 脚本名称：get_default_interface_ip_addr.sh
# 功能描述：
#   本脚本用于获取默认网络接口及其IP地址，集成多种方法，全面测试每种方法的输出结果。
#   主要方法包括：
#     1. /proc/net/route + awk
#     2. route + awk
#     3. ip route + awk
#     4. nmcli + grep + awk
#
# 使用方法：
#   直接运行脚本：
#       ./get_default_interface_ip_addr.sh
#
#   查看帮助信息：
#       ./get_default_interface_ip_addr.sh -h
################################################################################

#########################
# 获取默认接口的方法
#########################

# 方法1：使用 /proc/net/route + awk
get_iface_method1() {
    awk '$2 == "00000000" { print $1 }' /proc/net/route \
        | grep -Ev '^(lo|tun|tap|docker|veth|wg|zt)'
}

# 方法2：使用 route + awk
get_iface_method2() {
    route | grep default | awk '{print $(NF)}' \
        | grep -Ev '^(lo|tun|tap|docker|veth|wg|zt)'
}

# 方法3：使用 ip route + awk
get_iface_method3() {
    ip route | awk '/default/ { print $5 }' \
        | grep -Ev '^(lo|tun|tap|docker|veth|wg|zt)'
}

# 方法4：使用 nmcli + grep + awk
get_iface_method4() {
    nmcli -t -f DEVICE,STATE d | grep ':connected' | awk -F: '{print $1}' \
        | grep -Ev '^(lo|tun|tap|docker|veth|wg|zt)'
}

#########################
# 获取默认接口IP的方法
#########################
get_ip_address() {
    local iface="$1"
    ip addr show dev "$iface" | awk '$1 == "inet" { sub("/.*", "", $2); print $2 }'
}

#########################
# 帮助信息
#########################
usage() {
    echo "用法: $0"
    echo "直接运行脚本显示默认网络接口和IP地址。"
    echo "示例: $0"
}

#########################
# 主函数
#########################
main() {
    if [[ "$1" == "-h" || "$1" == "--help" ]]; then
        usage
        exit 0
    fi

    methods=(get_iface_method1 get_iface_method2 get_iface_method3 get_iface_method4)
    for method in "${methods[@]}"; do
        iface=$($method)
        ip=$(get_ip_address "$iface")
        echo "默认网络接口：$iface (方法：$method)，IP地址：$ip"
    done
}

main "$@"
